package org.jupiter.blog.service.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.jupiter.blog.api.domain.JupiterComment;

import java.util.List;

@Mapper
public interface JupiterCommentMapper {

	/**
	 * 插入评论
	 *
	 * @param comment
	 * 		评论实体
	 * @return 影响行数
	 */
	int insert(JupiterComment comment);

	/**
	 * 根据ID查询评论
	 *
	 * @param uuid
	 * 		评论ID
	 * @return 评论实体
	 */
	JupiterComment selectByUuid(@Param("uuid") String uuid);

	/**
	 * 根据文章ID查询评论列表
	 *
	 * @param articleId
	 * 		文章ID
	 * @return 评论列表
	 */
	List<JupiterComment> selectByArticleId(@Param("articleId") String articleId);

	/**
	 * 分页查询评论
	 *
	 * @param uuid
	 * 		评论ID
	 * @param articleId
	 * 		文章ID
	 * @param userId
	 * 		用户ID
	 * @param parentId
	 * 		父评论ID
	 * @param isStick
	 * 		是否置顶
	 * @param offset
	 * 		偏移量
	 * @param limit
	 * 		限制数量
	 * @return 评论列表
	 */
	List<JupiterComment> selectByPage(
		@Param("uuid") String uuid,
		@Param("articleId") String articleId,
		@Param("userId") String userId,
		@Param("parentId") String parentId,
		@Param("isStick") Integer isStick,
		@Param("offset") int offset,
		@Param("limit") int limit
	);

	/**
	 * 统计评论数量
	 *
	 * @param uuid
	 * 		评论ID
	 * @param articleId
	 * 		文章ID
	 * @param userId
	 * 		用户ID
	 * @param parentId
	 * 		父评论ID
	 * @param isStick
	 * 		是否置顶
	 * @return 评论数量
	 */
	long countByQuery(
		@Param("uuid") String uuid,
		@Param("articleId") String articleId,
		@Param("userId") String userId,
		@Param("parentId") String parentId,
		@Param("isStick") Integer isStick
	);

	/**
	 * 更新评论（兼容未更新字段）
	 *
	 * @param comment
	 * 		评论实体
	 * @return 影响行数
	 */
	int updateByUuidSelective(JupiterComment comment);

	/**
	 * 根据ID删除评论
	 *
	 * @param uuid
	 * 		评论ID
	 * @return 影响行数
	 */
	int deleteByUuid(@Param("uuid") String uuid);

	/**
	 * 点赞评论
	 *
	 * @param uuid
	 * 		评论ID
	 * @return 影响行数
	 */
	int likeComment(@Param("uuid") String uuid);
}
